開始開發我們的backend_api吧。
首先先將backend_api這個app加到INSTALL_APPS中,為的是要讓project知道我們安裝了這個自己開發的app。
INSTALLED_APPS = (
...
'rest_framework',
'backend_api',
)
接下來就可以開始編輯backend_api/models.py來定義我們會用到的models。
我們先定義Bill這個class當做我們記帳App的"帳目"model。
from django.db import models
class Bill(models.Model):
TWD = 'TWD'
USD = 'USD'
JPY = 'JPY'
CURRENCY_CHOICES = ( #for currency choices
(TWD, TWD),
(USD, USD),
(JPY, JPY),
)
FOOD = 'FOO'
DRINK = 'DRI'
TRANSPORTATION = 'TRA'
OTHERS = 'OTH'
CATEGORY_CHOICES = ( #for category choices
(FOOD, 'Food'),
(DRINK, 'Drink'),
(TRANSPORTATION, 'Transportation'),
(OTHERS, 'others'),
)
created_date = models.DateTimeField()
title = models.CharField(max_length=255)
amount = models.DecimalField(max_digits=12, decimal_places=2)
currency = models.CharField(max_length=3, choices=CURRENCY_CHOICES, default=TWD)
category = models.CharField(max_length=3, choices=CATEGORY_CHOICES, default=FOOD)
class Meta:
ordering = ('created_date', )
在Bill這個class繼承了models.Model這個class。它就擁有了Django model中了基本屬性了,Bill內又定義了五個properties。
Django 獨有的ORM系統會將model轉成Database的table,基本的使用上是可以不需要下SQL語法,直接與model instance互動就可以對DB做操作。
當然在某些特殊的query下還是直接使用SQL語法比較適當,Django也支援SQL語法的直接操作。
Bill內的五個properties分別是
model定義好後我們就可以建立Database了,Django 1.7的app中有個新功能叫migration。
Django 1.7之前的migration一般來說會使用South這類的套件幫忙,因為這樣Django1.7就新增了migration這樣的功能。
它可以幫你記錄DB的schema歷史紀錄,由於我們的backend_api是新建立的app,所以migrations資料夾內是空的。
要建立DB首先先在command line下:
python manage.py syncdb
它會問你是否要建立Django的auth user,就建立一個叫admin的user吧。
在stdout中你會看到一些log,log中的Operation to perform你會看到他將rest_framework當做umigrated app,Django 內建的app則有migrations。
那是因為rest_framework這個app似乎並未去更新Django 1.7的migration功能。不過沒關係,還是可以使用的XD
我們的backend_api並沒有出現在這些app中,請在command line在下:
python manage.py makemigrations backend_api
這樣就會將backend_api的model寫進DB裡了,在到backend_api/migrations裡看一下,發現多出一個0001_initial.py,裡面的內容就是Django根據models.py寫進DB的schema。
我們可以進sqlite的console看一下tables是否真的建立起來。
sqlite3 db.sqlite
進入console後可以打.help看可以使用的指令,我們用.tables來看目前DB中的tables。
應該可以看到backend_api出現了。
再來我們可以利用django console來和model互動。
python manage.py shell
這樣會進入Django的console中,你可以想像他為python的互動環境,只是多了Django的基礎功能。
我們下一系列指令:
一開始Bill.objects.all()代表將DB中的Bills資料都query出來,當然目前一個都沒有所以是一個空的list。
接下來我們新增一個Bill的instance,並call它的save method,這樣它就被存到DB中了,id是1。
在call一次Bill.objects.all()後就看到有我們剛存進去的那個Bill。
在到sqlite裡確認一次:
sqlite3 db.sqlite
select * from backend_api_bill;
這樣就會看到剛存進去的Bil出現在第一個column中了。
目前都還是在Django的範圍,接下來會開始使用rest_framework的功能囉!
Day3 Ending